home *** CD-ROM | disk | FTP | other *** search
- // GETINFO SCRIPTING
- // dvd-inside (DE/CH) import
-
- (***************************************************
- * Movie importation script for: *
- * DVD-Inside (www.dvd-inside.de) *
- * *
- * v0.1 - 2. Week 2005: "From scratch" *
- * v0.2 - 16.January 2005: "Rewritten" *
- * *
- * (c) 2004 Tiziano Mⁿller *
- * *
- * This script is based on the IMDB-script. *
- * So, credits go to the authors of the *
- * IMDB-script. *
- * *
- * For use with Ant Movie Catalog 3.4.3 *
- * www.antp.be/software/moviecatalog *
- * *
- * This program is free software; you can *
- * redistribute it and/or modify it under the *
- * terms of the GNU General Public License as *
- * published by the Free Software Foundation; *
- * either version 2 of the License, or (at your *
- * option) any later version. *
- ***************************************************)
-
- program dvd_inside;
-
- const
- CRLF = #13#10;
-
- var
- MovieName: string;
- MovieURL: string;
-
- function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
- var
- i: Integer;
- begin
- result := -1;
- if StartAt < 0 then
- StartAt := 0;
- for i := StartAt to List.Count-1 do
- if Pos(Pattern, List.GetString(i)) <> 0 then
- begin
- result := i;
- Break;
- end;
- end;
-
- function MyTrim(str_: string): string;
- var
- chars: array of char;
- StrLen, i, LastSpacePos: integer;
- begin
- result := '';
-
- str_ := StringReplace(str_, #9, '');
- str_ := StringReplace(str_, #10, '');
- str_ := StringReplace(str_, #13, '');
-
-
- while Pos(' ', str_) = 1 do
- begin
- Delete(str_, Pos(' ', str_), 1);
- end;
-
- StrLen := Length(str_);
- SetArrayLength(chars, StrLen);
- for i := 0 to StrLen-1 do
- begin
- chars[i] := Copy(str_,i+1,1);
- end;
-
- str_ := '';
- LastSpacePos := StrLen - 1;
- if LastSpacePos > -1 then
- begin
- while chars[LastSpacePos] = ' ' do
- begin
- LastSpacePos := LastSpacePos - 1;
- end;
- for i:= 0 to LastSpacePos do
- begin
- str_ := str_ + chars[i];
- end;
- end;
-
- str_ := StringReplace(str_, ' ', ' ');
- while result <> str_ do
- begin
- result := str_;
- str_ := StringReplace(str_, ' ', ' ');
- end;
- result := StringReplace(result, ' ,', ',');
-
- end;
-
- procedure CutAfter(var str_: string; Pattern: string);
- begin
- str_ := Copy(str_, Pos(Pattern, str_) + Length(Pattern), Length(str_));
- end;
-
- procedure CutBefore(var Str: string; Pattern: string);
- begin
- Str := Copy(Str, Pos(Pattern, Str), Length(Str));
- end;
-
- function GetStringBetween(str_, StartTag, EndTag: string): string;
- var
- BeginPos, EndPos: integer;
- begin
- result := '';
- if EndTag = '' then
- begin
- EndPos := Length(str_);
- end
- else
- EndPos := Pos(EndTag, str_);
-
- BeginPos := Pos(StartTag, str_) + Length(StartTag);
- if StartTag = '' then BeginPos := 1;
- if BeginPos > 0 then result := Copy(str_, BeginPos, EndPos - BeginPos);
-
- end;
-
- function GetTrimmedStringBetween(str_, StartTag, EndTag: string): string;
- begin
- result := MyTrim(GetStringBetween(str_, StartTag, EndTag));
- end;
-
- // Extracts single movie detail (like director, genre) from page
- function GetStringFromHTML(Page, StartTag, CutTag, EndTag: string): string;
- begin
- Result := '';
- // recognition tag - if present, extract detail from page, otherwise assume detail is not present
- if Pos(StartTag, Page) > 0 then begin
- CutBefore(Page, StartTag);
- // optional cut tag helps finding right string in html page
- if Length(CutTag) > 0 then
- CutAfter(Page, CutTag);
- // movie detail copied with html tags up to end string
- Result := Copy(Page, 0, Pos(EndTag, Page) - 1);
- // remove html tags and decode html string
- // HTMLRemoveTags(Result);
- HTMLDecode(Result);
- end;
- end;
-
- function StripHTMLTags(str_: string): string;
- var
- temp_char : char;
- StrLen, i, CharPos : integer;
- DoCopy : boolean;
- begin
- DoCopy := true;
- CharPos := 0;
- result := '';
- StrLen := Length(str_);
- for i := 1 to StrLen do
- begin
- temp_char := Copy(str_,i,1);
- if temp_char = '<' then
- begin
- DoCopy := false;
- continue;
- end
- else if temp_char = '>' then
- begin
- DoCopy := true;
- continue;
- end
- else
- begin
- if DoCopy then
- begin
- result := result + temp_char;
- end;
- end;
- end;
-
- end;
-
- procedure AnalyzeIndexPage(Address, Params: string);
- var
- IndexPage: TStringList;
- Page: string;
- begin
- IndexPage := TStringList.Create;
- Address := URLEncode(Address);
- Params := URLEncode(Params);
- IndexPage.Text := PostPage(Address,Params);
-
- PickTreeClear;
- PickTreeAdd('Search results', '');
- AddMoviesTitles(IndexPage);
- if PickTreeExec(Address) then
- begin
- Page := GetPage(Address);
- AnalyzeMoviePage(Page, Address);
- end;
- IndexPage.Free;
- end;
-
-
-
- procedure AnalyzeMoviePage(Page,Address: string);
- var
- StrPosition: Integer;
- StrTemp: string;
-
- OriginalTitle, Country, Year, Genre, Studio, Region, EAN_Number, Distributor, AFK, Duration: string;
- VideoFormat, ScreenFormat, ScreenSystem, Language, AudioFormat, Subtitle, MediaType, Disks: string;
- Comments, Bonusmaterial, Packaging, TranslatedTitle, Director, Cast, Producer, Description: string;
- Music, Screenplay: string;
-
- begin
- // Initializing the very important Comments
- Comments := '';
- // URL
- SetField(fieldURL, Address);
-
- // Translated title
- TranslatedTitle := MyTrim(GetStringFromHTML(Page,'<b class="ueberschrift">','">','</b>'));
- SetField(fieldTranslatedTitle, TranslatedTitle);
-
- // Original-Title, Country and Year
- StrTemp := MyTrim(GetStringFromHTML(Page, 'Originaltitel:','<td>','</td>'));
- StrTemp := StripHTMLTags(StrTemp);
- OriginalTitle := GetTrimmedStringBetween(StrTemp,'','(');
- StrTemp := GetTrimmedStringBetween(StrTemp,'(',')');
- Country := Copy(StrTemp,1,Length(StrTemp)-4);
- Year := Copy(StrTemp,Length(StrTemp)-4,Length(StrTemp));
-
- SetField(fieldOriginalTitle, OriginalTitle);
- SetField(fieldCountry, Country);
- SetField(fieldYear, Year);
-
- // EAN-Number
-
- EAN_Number := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'EAN-Nummer:','<td>', '</td>')));
- Comments := Comments + 'EAN-Nummer: ' + EAN_Number + CRLF;
-
- // Genre
- Genre := '';
- Genre := MyTrim(GetStringFromHTML(Page, 'Genre:', '<td>', '</td>'));
- Genre := MyTrim(StripHTMLTags(Genre));
- setField(fieldCategory, Genre);
-
- // Studio
- Studio := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Studio:','</td>', '</tr>')));
- Comments := Comments + 'Studio: ' + Studio + CRLF;
-
- // Distributor
- Distributor := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Vertrieb:','</td>', '</tr>')));
- Comments := Comments + 'Vertrieb: ' + Distributor + CRLF;
-
- // Altersfreigabe
- AFK := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Altersfreigabe:','</td>', '</tr>')));
- Comments := Comments + 'Altersfreigabe: ' + AFK + CRLF;
-
- // CountryCode
- Region := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Ländercode:','</td>', '</tr>')));
- VideoFormat := 'DVD Zone '+Region;
- setField(fieldVideoFormat,VideoFormat);
-
- // Duration
- Duration := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Filmlänge:','</td>', '</tr>')));
- Duration := StringReplace(Duration,' min','');
- setField(fieldLength,Duration);
-
- // Description
- Description := GetStringFromHTML(Page, 'Inhalt:','</td>', '</tr>');
- Description := StringReplace(Description, '<br />','*');
- Description := MyTrim(StripHTMLTags(Description));
- Description := StringReplace(Description, '*',CRLF);
- setField(fieldDescription,Description);
-
- // Actors
- Cast := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Schauspieler:','</td>', '</tr>')));
- setField(fieldActors,Cast);
-
- // Director
- Director := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Regie:','</td>', '</tr>')));
- setField(fieldDirector,Director);
-
- // Production
- Producer := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Produzent:','</td>', '</tr>')));
- setField(fieldProducer,Producer);
-
- // Music
- Music := '';
- Music := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Music:','</td>', '</tr>')));
- Comments := Comments + 'Musik: ' + Music + CRLF;
-
- // Screenplay
- Screenplay := '';
- Screenplay := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Drehbuch:','</td>', '</tr>')));
- Comments := Comments + 'Drehbuch: ' + Screenplay + CRLF;
-
- // Screen format & system
- ScreenFormat := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Format:','</td>', '</tr>')));
- ScreenSystem := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'System:','</td>', '</tr>')));
- setField(fieldResolution,ScreenSystem + ' - ' + ScreenFormat);
-
- // Audioformat/Language
- AudioFormat := '';
- Language := '';
- StrTemp := GetStringFromHTML(Page, 'Tonformate / Sprachen:', '</td>', '</td>');
-
- StrTemp := StringReplace(StrTemp, '<br />','*') + '*';
- StrTemp := MyTrim(StripHTMLTags(StrTemp));
-
- while Pos('*',StrTemp) > 0 do
- begin
- AudioFormat := AudioFormat + ', ' + MyTrim(Copy(StrTemp,1,Pos(' in ',StrTemp)));
- Language := Language + ', ' + MyTrim(Copy(StrTemp,Pos(' in ',StrTemp)+4,Pos('*',StrTemp)-(Pos(' in ',StrTemp)+4)));
- CutAfter(StrTemp,'*');
- end;
- AudioFormat := Copy(AudioFormat,3,Length(AudioFormat));
- Language := Copy(Language,3,Length(Language));
-
- setField(fieldAudioFormat, AudioFormat);
- setField(fieldLanguages, Language);
-
- // Subtitles
- Subtitle := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Untertitel:', '</td>', '</tr>')));
- if Subtitle = 'Keine Untertitel' then Subtitle := '';
- setField(fieldSubtitles, Subtitle);
-
- // Mediatype
- MediaType := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Medientyp:','</td>', '</tr>')));
- setField(fieldMediaType, MediaType);
-
- // Disks
- Disks := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Medienanzahl:','</td>', '</tr>')));
- setField(fieldDisks, Disks);
-
- // Package
- Packaging := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Verpackung:', '</td>', '</tr>')));
- Comments := Comments + 'Verpackung: ' + Packaging + CRLF;
-
- // Bonusmaterial
- Bonusmaterial := MyTrim(GetStringFromHTML(Page, 'Bonus-Matrial:', '</td>', '</tr>'));
- Bonusmaterial := StringReplace(Bonusmaterial,'<br />','*');
- Bonusmaterial := MyTrim(StripHTMLTags(Bonusmaterial));
- Bonusmaterial := StringReplace(Bonusmaterial,'*',CRLF);
- Comments := Comments + CRLF + 'Bonusmaterial' + CRLF + '===========' + CRLF + Bonusmaterial + CRLF;
-
-
-
- setField(fieldComments,Comments);
- DisplayResults;
- end;
-
- procedure AddMoviesTitles(ResultsPage: TStringList);
- var
- Page: string;
- MovieTitle, MovieAddress: String;
- begin
- Page := ResultsPage.Text;
- while Pos('details.php', Page) > 0 do
- begin
- CutBefore(Page, 'details.php');
- MovieAddress := 'http://www.dvd-inside.de/db/' + GetStringFromHTML(Page, 'details.php', '', '"');
- MovieTitle := MyTrim(GetStringFromHTML(Page, 'details.php', '">', '</tr>'));
- MovieTitle := StringReplace(MovieTitle, '</td>', ' | ');
- MovieTitle := MyTrim(StripHTMLTags(MovieTitle));
- CutAfter(Page, '</tr>');
- PickTreeAdd(MovieTitle, MovieAddress);
- end;
- end;
-
- begin
- if CheckVersion(3,4,3) then
- begin
- MovieName := GetField(fieldOriginalTitle);
- if MovieName = '' then
- MovieName := GetField(fieldTranslatedTitle);
- if Input('dvd-inside import', 'Enter the title of the movie:', MovieName) then
- begin
- AnalyzeIndexPage('http://www.dvd-inside.de/db/search.php', 'action=new&title='+MovieName+'&suchen=Suchen');
- end;
- end
- else
- ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.3)');
- end.
-